﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using PGE.Models.Controladores;

namespace PGE.Models
{
    public sealed class Fachada : IDisposable
    {
        private ControladorUsuario controladorUsuario;
        private ControladorVisita controladorVisita;
        private ControladorLogin controladorLogin;
        private static Fachada instance;

        private Fachada()
        {
            controladorUsuario = new ControladorUsuario();
            controladorVisita = new ControladorVisita();
            controladorLogin = new ControladorLogin();
        }

        public static Fachada getInstance()
        {
            if (instance == null)
                instance = new Fachada();
            return instance;
        }

        #region Login

        public bool ValidarLoginUsuario(LogOnModel model)
        {
            return true;
        }

        #endregion

        #region Usuario

        public void CriarUsuario(Usuario user)
        {
            controladorUsuario.Criar(user);
        }

        public void EditarUsuario(Usuario user)
        {
            controladorUsuario.Editar(user);
        }

        public void RemoverUsuario(Usuario user)
        {
            controladorUsuario.Remover(user);
        }

        public List<Usuario> Usuarios()
        {
            return controladorUsuario.Usuarios();
        }

        public Usuario GetUsuario(int id)
        {
            return controladorUsuario.GetUsuario(id);
        }

        public List<Usuario> Clientes()
        {
            return controladorUsuario.Clientes();
        }

        public List<Usuario> Vendedores()
        {
            return controladorUsuario.Vendedores();
        }

        #endregion

        #region Visita

        public void CriarVisita(Visita visita)
        {
            controladorVisita.Criar(visita);
        }

        public void EditarVisita(Visita visita)
        {
            controladorVisita.Editar(visita);
        }

        public void ConfirmarVisita(Visita visita)
        {
            controladorVisita.ConfirmarVisita(visita);
        }

        public void RemoverVisita(Visita visita)
        {
            controladorVisita.Remover(visita);
        }

        public List<Visita> Visitas()
        {
            return controladorVisita.Visitas();
        }

        public Visita GetVisita(int id)
        {
            return controladorVisita.GetVisita(id);
        }

        #endregion

        public void Dispose()
        {
            controladorUsuario.Dispose();
        }
    }
}